package ar.edu.ufasta.presupuestos.servicios.web;

import ar.edu.ufasta.presupuestos.logica.entidades.Cliente;
import ar.edu.ufasta.presupuestos.servicios.persistencia.ObjectID;
import ar.edu.ufasta.presupuestos.servicios.persistencia.PersistenceFacade;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.InfoClienteRequest;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.InfoClienteResponse;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.RequestPack;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.ResponsePack;

public class InfoCliente extends Protocol {

	private InfoClienteRequest request;
	private InfoClienteResponse response;
	
	public InfoCliente(){
		super();
		response = new InfoClienteResponse();
	}
	
	/**
	 * @return the request
	 */
	public InfoClienteRequest getRequest() {
		return request;
	}

	/**
	 * @param request the request to set
	 */
	public void setRequest(InfoClienteRequest request) {
		this.request = request;
	}

	/**
	 * @return the response
	 */
	public InfoClienteResponse getResponse() {
		return response;
	}

	/**
	 * @param response the response to set
	 */
	public void setResponse(InfoClienteResponse response) {
		this.response = response;
	}

	@Override
	public int execute() {
		response.setProtocol(Constantes.PROTOCOL_100);
		response.setSystemCode(Constantes.SYSTEM_CODE);
		response.setResultCode(Constantes.TRANSACTION_OK);
		
		Cliente miCliente;
		int idCliente = request.getIdCliente();
		try {
			LogFile.write("---- Transaction Result -> INFO-CLIENTE OK");
			miCliente = (Cliente)PersistenceFacade.getInstance().get(new ObjectID(idCliente), Cliente.class);
			if (miCliente != null){
				response.setNombreCompleto(miCliente.getApellido()+", "+miCliente.getNombre());
				response.setDireccion(miCliente.getDomicilio().getDireccion());
				response.setCodigoPostal(miCliente.getDomicilio().getCodigoPostal());
				//TODO Obtener el nombre de la provincia
				response.setProvincia(miCliente.getDomicilio().getProvinciaCode().toString());
				response.setTelefono(miCliente.getTelefono());
				response.setCelular(miCliente.getCelular());
				response.setEmail(miCliente.getEmail());
				response.setFechaCreacion(miCliente.getFechaCreacion());
			}else{
				response.setResultCode(Constantes.ERROR_NO_USER);
				LogFile.write("---- Transaction Result -> USER NOT EXIST");
			}
		} catch (Exception e) {
			response.setResultCode(Constantes.ERROR_SERVER_ERROR);
			LogFile.write("**** Error in MySQL queries ****");
			return -1;
		}
		return 0;
	}

	@Override
	public String getOperationMsg() {
		return "---- Received Request   -> INFO-CLIENTE";
	}

	@Override
	public ResponsePack getRespuesta() {
		return (InfoClienteResponse)this.response;
	}

	@Override
	public void setPedido(RequestPack request) {
		this.request = (InfoClienteRequest)request;		
	}

}
